this is what I used last to complete levels fast

diff --git a/main/cntrlcen.c b/main/cntrlcen.c
index 0a028d2..0128cd7 100644
--- a/main/cntrlcen.c
+++ b/main/cntrlcen.c
@@ -128,7 +128,7 @@ int Control_center_destroyed = 0;
 fix Countdown_timer=0;
 int Countdown_seconds_left=0, Total_countdown_time=0;		//in whole seconds
 
-static const int	Alan_pavlish_reactor_times[NDL] = {90, 60, 45, 35, 30};
+static const int	Alan_pavlish_reactor_times[NDL] = {320, 320, 320, 320, 320};
 
 //	-----------------------------------------------------------------------------
 //	Called every frame.  If control center been destroyed, then actually do something.
diff --git a/main/cntrlcen.h b/main/cntrlcen.h
index 3cd084f..81f0d65 100644
--- a/main/cntrlcen.h
+++ b/main/cntrlcen.h
@@ -88,7 +88,7 @@ extern void calc_controlcen_gun_point(reactor *reactor, object *obj,int gun_num)
 extern void do_controlcen_destroyed_stuff(object *objp);
 extern void do_controlcen_dead_frame(void);
 
-#define DEFAULT_CONTROL_CENTER_EXPLOSION_TIME 30    // Note: Usually uses Alan_pavlish_reactor_times, but can be overridden in editor.
+#define DEFAULT_CONTROL_CENTER_EXPLOSION_TIME 320    // Note: Usually uses Alan_pavlish_reactor_times, but can be overridden in editor.
 
 extern fix Countdown_timer;
 extern int Control_center_destroyed, Countdown_seconds_left, Total_countdown_time;
diff --git a/main/gamecntl.c b/main/gamecntl.c
index f83819d..da5cdf2 100644
--- a/main/gamecntl.c
+++ b/main/gamecntl.c
@@ -170,12 +170,15 @@ void transfer_energy_to_shield()
 
 	if (e <= 0) {
 
-		if (Players[Player_num].energy <= INITIAL_ENERGY) {
+		if (Players[Player_num].energy <= INITIAL_ENERGY/2) {
 			HUD_init_message(HM_DEFAULT, "Need more than %i energy to enable transfer", f2i(INITIAL_ENERGY));
+      return;
 		}
 		else if (Players[Player_num].shields >= MAX_SHIELDS) {
 			HUD_init_message_literal(HM_DEFAULT, "No transfer: Shields already at max");
+      return;
 		}
+   	HUD_init_message(HM_DEFAULT, "Negative e = %i %i", f2i(e), e);
 		return;
 	}
 
diff --git a/main/gamesave.c b/main/gamesave.c
index ffa0b8b..8e22be1 100644
--- a/main/gamesave.c
+++ b/main/gamesave.c
@@ -1275,7 +1275,7 @@ int load_level(const char * filename_passed)
 
 	if (Gamesave_current_version >= 3)
 		Base_control_center_explosion_time = PHYSFSX_readInt(LoadFile);
-	else
+//	else //aka don't use reactor countdown time from savefile!
 		Base_control_center_explosion_time = DEFAULT_CONTROL_CENTER_EXPLOSION_TIME;
 
 	if (Gamesave_current_version >= 4)
diff --git a/main/player.h b/main/player.h
index ece9742..56d40c0 100644
--- a/main/player.h
+++ b/main/player.h
@@ -30,11 +30,11 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #define MAX_MULTI_PLAYERS MAX_PLAYERS+3
 
 // Initial player stat values
-#define INITIAL_ENERGY  i2f(100)    // 100% energy to start
-#define INITIAL_SHIELDS i2f(100)    // 100% shields to start
+#define INITIAL_ENERGY  i2f(200)    // 100% energy to start
+#define INITIAL_SHIELDS i2f(200)    // 100% shields to start
 
-#define MAX_ENERGY      i2f(200)    // go up to 200
-#define MAX_SHIELDS     i2f(200)
+#define MAX_ENERGY      i2f(16383)    // go up to 200
+#define MAX_SHIELDS     i2f(16383) //16383 so that converter works!
 
 #define INITIAL_LIVES               3   // start off with 3 lives
 
@@ -55,12 +55,12 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #define PLAYER_FLAGS_HEADLIGHT      8192    // Player has headlight boost
 #define PLAYER_FLAGS_HEADLIGHT_ON   16384   // is headlight on or off?
 
-#define AFTERBURNER_MAX_TIME    (F1_0*5)    // Max time afterburner can be on.
+#define AFTERBURNER_MAX_TIME    (F1_0*15)    // Max time afterburner can be on.
 #define CALLSIGN_LEN                8       // so can use as filename (was: 12)
 
 // Amount of time player is cloaked.
-#define CLOAK_TIME_MAX          (F1_0*30)
-#define INVULNERABLE_TIME_MAX   (F1_0*30)
+#define CLOAK_TIME_MAX          (F1_0*300)
+#define INVULNERABLE_TIME_MAX   (F1_0*300)
 
 #define PLAYER_STRUCT_VERSION   17  // increment this every time player struct changes
 
diff --git a/main/powerup.c b/main/powerup.c
index 213a564..986a485 100644
--- a/main/powerup.c
+++ b/main/powerup.c
@@ -178,13 +178,37 @@ void do_megawow_powerup(int quantity)
 }
 //#endif
 
+extern void invalidate_escort_goal(void);
 int pick_up_energy(void)
 {
 	int	used=0;
 
+
+		Players[Player_num].flags |=   (PLAYER_FLAGS_INVULNERABLE |
+													PLAYER_FLAGS_CLOAKED |
+													PLAYER_FLAGS_MAP_ALL);
+				Players[Player_num].invulnerable_time = GameTime64;
+				powerup_basic(7, 14, 21, INVULNERABILITY_SCORE, "%s!",TXT_INVULNERABILITY);
+				Players[Player_num].cloak_time = GameTime64;	//	Not! changed by awareness events (like player fires laser).
+				ai_do_cloak_stuff();
+				#ifdef NETWORK
+				if (Game_mode & GM_MULTI)
+					multi_send_cloak();
+				#endif
+				powerup_basic(-10,-10,-10, CLOAK_SCORE, "%s!",TXT_CLOAKING_DEVICE);
+
+			Players[Player_num].flags |= PLAYER_FLAGS_BLUE_KEY | PLAYER_FLAGS_RED_KEY | PLAYER_FLAGS_GOLD_KEY;
+      if (! (Players[Player_num].flags & (PLAYER_FLAGS_BLUE_KEY | PLAYER_FLAGS_RED_KEY | PLAYER_FLAGS_GOLD_KEY)) ) {
+        powerup_basic(0, 0, 15, KEY_SCORE, "%s %s",TXT_BLUE,TXT_ACCESS_GRANTED);
+        powerup_basic(15, 0, 0, KEY_SCORE, "%s %s",TXT_RED,TXT_ACCESS_GRANTED);
+        powerup_basic(15, 15, 7, KEY_SCORE, "%s %s",TXT_YELLOW,TXT_ACCESS_GRANTED);
+        invalidate_escort_goal();
+      }
+			pick_up_secondary(SMISSILE5_INDEX,10);
+
 	if (Players[Player_num].energy < MAX_ENERGY) {
 		fix boost;
-		boost = 3*F1_0 + 3*F1_0*(NDL - Difficulty_level);
+		boost = 3*F1_0*10;//3*F1_0 + 3*F1_0*(NDL - 1);
 		if (Difficulty_level == 0)
 			boost += boost/2;
 		Players[Player_num].energy += boost;
@@ -218,7 +242,6 @@ int pick_up_vulcan_ammo(void)
 	return used;
 }
 
-extern void invalidate_escort_goal(void);
 extern char GetKeyValue(char);
 extern void check_to_use_primary(int);
 extern void multi_send_got_flag (char);
@@ -269,10 +292,24 @@ int do_powerup(object *obj)
 			break;
 		case POW_SHIELD_BOOST:
 			if (Players[Player_num].shields < MAX_SHIELDS) {
-				fix boost = 3*F1_0 + 3*F1_0*(NDL - Difficulty_level);
+				fix boost = 3*F1_0*20;//3*F1_0 + 3*F1_0*(NDL - 1); //aka rookie difficulty = +15 shield pickup
 				if (Difficulty_level == 0)
 					boost += boost/2;
 				Players[Player_num].shields += boost;
+
+    		Players[Player_num].flags |=   (PLAYER_FLAGS_INVULNERABLE |
+													PLAYER_FLAGS_CLOAKED |
+													PLAYER_FLAGS_MAP_ALL);
+				Players[Player_num].invulnerable_time = GameTime64;
+				powerup_basic(7, 14, 21, INVULNERABILITY_SCORE, "%s!",TXT_INVULNERABILITY);
+				Players[Player_num].cloak_time = GameTime64;	//	Not! changed by awareness events (like player fires laser).
+				ai_do_cloak_stuff();
+				#ifdef NETWORK
+				if (Game_mode & GM_MULTI)
+					multi_send_cloak();
+				#endif
+				powerup_basic(-10,-10,-10, CLOAK_SCORE, "%s!",TXT_CLOAKING_DEVICE);
+
 				if (Players[Player_num].shields > MAX_SHIELDS)
 					Players[Player_num].shields = MAX_SHIELDS;
 				powerup_basic(0, 0, 15, SHIELD_SCORE, "%s %s %d",TXT_SHIELD,TXT_BOOSTED_TO,f2ir(Players[Player_num].shields));
@@ -304,8 +341,8 @@ int do_powerup(object *obj)
 			break;
 
 		case POW_KEY_BLUE:
-			if (Players[Player_num].flags & PLAYER_FLAGS_BLUE_KEY)
-				break;
+//			if (Players[Player_num].flags & PLAYER_FLAGS_BLUE_KEY)
+//				break;
 #ifdef NETWORK
 			multi_send_play_sound(Powerup_info[obj->id].hit_sound, F1_0);
 #endif
@@ -319,8 +356,8 @@ int do_powerup(object *obj)
 			invalidate_escort_goal();
 			break;
 		case POW_KEY_RED:
-			if (Players[Player_num].flags & PLAYER_FLAGS_RED_KEY)
-				break;
+//			if (Players[Player_num].flags & PLAYER_FLAGS_RED_KEY)
+//				break;
 #ifdef NETWORK
 			multi_send_play_sound(Powerup_info[obj->id].hit_sound, F1_0);
 #endif
@@ -334,8 +371,8 @@ int do_powerup(object *obj)
 			invalidate_escort_goal();
 			break;
 		case POW_KEY_GOLD:
-			if (Players[Player_num].flags & PLAYER_FLAGS_GOLD_KEY)
-				break;
+//			if (Players[Player_num].flags & PLAYER_FLAGS_GOLD_KEY)
+//				break;
 #ifdef NETWORK
 			multi_send_play_sound(Powerup_info[obj->id].hit_sound, F1_0);
 #endif
diff --git a/main/powerup.h b/main/powerup.h
index c7dd69a..9fab463 100644
--- a/main/powerup.h
+++ b/main/powerup.h
@@ -84,7 +84,7 @@ enum powerup_type_t
 	POW_HOARD_ORB = 7,       // use unused slot
 };
 
-#define VULCAN_AMMO_MAX             (392*4)
+#define VULCAN_AMMO_MAX             (40*392*4)
 #define VULCAN_WEAPON_AMMO_AMOUNT   196
 #define VULCAN_AMMO_AMOUNT          (49*2)
 
diff --git a/main/weapon.c b/main/weapon.c
index bb0b8cd..4ff7b9d 100644
--- a/main/weapon.c
+++ b/main/weapon.c
@@ -53,7 +53,7 @@ const ubyte Secondary_weapon_to_weapon_info[MAX_SECONDARY_WEAPONS] = {CONCUSSION
 const ubyte Secondary_weapon_to_gun_num[MAX_SECONDARY_WEAPONS] = {4,4,7,7,7,4,4,7,4,7};
 
 const int Primary_ammo_max[MAX_PRIMARY_WEAPONS] = {0, VULCAN_AMMO_MAX, 0, 0, 0, 0, VULCAN_AMMO_MAX, 0, 0, 0};
-const ubyte Secondary_ammo_max[MAX_SECONDARY_WEAPONS] = {20, 10, 10, 5, 5, 20, 20, 15, 10, 10};
+const ushort Secondary_ammo_max[MAX_SECONDARY_WEAPONS] = {16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383};
 
 //for each primary weapon, what kind of powerup gives weapon
 const ubyte Primary_weapon_to_powerup[MAX_PRIMARY_WEAPONS] = {POW_LASER,POW_VULCAN_WEAPON,POW_SPREADFIRE_WEAPON,POW_PLASMA_WEAPON,POW_FUSION_WEAPON,POW_LASER,POW_GAUSS_WEAPON,POW_HELIX_WEAPON,POW_PHOENIX_WEAPON,POW_OMEGA_WEAPON};
diff --git a/main/weapon.h b/main/weapon.h
index 4ea182f..7b22a03 100644
--- a/main/weapon.h
+++ b/main/weapon.h
@@ -186,7 +186,7 @@ extern const char *const Secondary_weapon_names_short[];
 extern const char *const Primary_weapon_names[];
 extern const char *const Secondary_weapon_names[];
 extern const int  Primary_ammo_max[MAX_PRIMARY_WEAPONS];
-extern const ubyte    Secondary_ammo_max[MAX_SECONDARY_WEAPONS];
+extern const ushort    Secondary_ammo_max[MAX_SECONDARY_WEAPONS];
 extern const sbyte    Weapon_is_energy[MAX_WEAPON_TYPES];
 
 #define HAS_WEAPON_FLAG 1
